package com.ht.base.system.biz.convert;

import com.ht.base.system.common.pojo.bo.SysMenuBO;
import org.base.common.constans.SystemConstant;
import org.apache.commons.lang3.StringUtils;

public class RouterVoBeanUtil {

    /**
     * 获取路由地址
     *
     * @param menu 菜单信息
     * @return 路由地址
     */
    public static String getRouterPath(SysMenuBO menu) {

        String routerPath = menu.getPath();
        // 内链打开外网方式
        if (menu.getParentId().intValue() != 0 && isInnerLink(menu)) {
            routerPath = innerLinkReplaceEach(routerPath);
        }
        // 非外链并且是一级目录（类型为目录）
        if (0 == menu.getParentId().intValue() && SystemConstant.M.equals(menu.getMenuType())
                && SystemConstant.STR_1.equals(menu.getIsFrame())) {
            routerPath = "/" + menu.getPath();
        }
        // 非外链并且是一级目录（类型为菜单）
        else if (isMenuFrame(menu)) {
            routerPath = "/";
        }
        return routerPath;
    }

    public static boolean isMenuFrame(SysMenuBO menu) {
        return menu.getParentId().intValue() == 0 && SystemConstant.C.equals(menu.getMenuType())
                && menu.getIsFrame().equals(SystemConstant.STR_1);
    }
    /**
     * 是否为内链组件
     *
     * @param menu 菜单信息
     * @return 结果
     */
    public static boolean isInnerLink(SysMenuBO menu) {
        return menu.getIsFrame().equals(SystemConstant.STR_1) && isHttp(menu.getPath());
    }

    public static boolean isHttp(String link) {
        Boolean isHttp = StringUtils.startsWithAny(link, SystemConstant.HTTP, SystemConstant.HTTPS);
        return isHttp;
    }

    /**
     * 内链域名特殊字符替换
     *
     * @return 替换后的内链域名
     */
    public static String innerLinkReplaceEach(String path) {
        return StringUtils.replaceEach(path, new String[]{SystemConstant.HTTP, SystemConstant.HTTPS, SystemConstant.WWW, "."},
                new String[]{"", "", "", "/"});
    }
    /**
     * 获取组件信息
     *
     * @param menu 菜单信息
     * @return 组件信息
     */
    public static String getComponent(SysMenuBO menu) {

        String component = SystemConstant.LAYOUT;
        if (StringUtils.isNotEmpty(menu.getComponent()) && !isMenuFrame(menu)) {
            component = menu.getComponent();
        } else if (StringUtils.isEmpty(menu.getComponent()) && menu.getParentId().intValue() != 0 && isInnerLink(menu)) {
            component = SystemConstant.INNER_LINK;
        } else if (StringUtils.isEmpty(menu.getComponent()) && isParentView(menu)) {
            component = SystemConstant.PARENT_VIEW;
        }
        return component;
    }

    /**
     * 是否为parent_view组件
     *
     * @param menu 菜单信息
     * @return 结果
     */
    public static boolean isParentView(SysMenuBO menu) {
        return menu.getParentId().intValue() != 0 && SystemConstant.M.equals(menu.getMenuType());
    }

}
